package cn.luoyifan.feign.clients;

import cn.luoyifan.domain.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

//用户服务的：远程调用的：Feign的客户端接口
//@FeignClient(value = "SERVICE-USER"):Feign的客户端注解，value是要调用的服务名
//fallbackFactory：降级工厂
@FeignClient(value = "SERVICE-USER",fallbackFactory = UserFeignClientFallbackFactory.class)
public interface UserFeignClient {
    //掉User服务的controller的@GetMapping("/getById/{id}")的方法
    //发请求，映射接口，跟目标服务的controller方法一模一样
    //1.根据SERVICE-USER服务名，能去服务注册表中找到user：1031 ，user：1030
    //2.底层使用了Ribbon，使用Ribbon的负载均衡选择其中一个：例如：user：1031 得到具体的目标服务实例
    //3.组装请求地址，参数：http：//服务地址：端口/getById/11111
    //注意：四同一不同  -  复制
    //      1.服务名。必须和调用的服务一样
    //      2.URL必须和目标服务的Controller中的方法URL一样
    //      3.参数必须和目标服务的Controller中的方法参数一样
    //      4.返回值必须和目标Controller中方法一一样
    //      5.方法的名字可以不一样
    @GetMapping("/getById/{id}")
    User getById(@PathVariable("id") Long id);
}
